var gulp = require('gulp'),
  sass = require('gulp-ruby-sass'),
  autoprefixer = require('gulp-autoprefixer'),
  minifycss = require('gulp-clean-css'),
  jshint = require('gulp-jshint'),
  uglify = require('gulp-uglify'),
  imagemin = require('gulp-imagemin'),
  rename = require('gulp-rename'),
  clean = require('gulp-clean'),
  concat = require('gulp-concat'),
  notify = require('gulp-notify'),
  cache = require('gulp-cache'),
  livereload = require('gulp-livereload'),
  extender = require('gulp-html-extend');

// 样式处理任务
gulp.task('styles', function() {
  return gulp.src('html/css/*.css') //引入所有CSS
    //.pipe(concat('main.css'))           //合并CSS文件
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    // .pipe(gulp.dest('dist/css'))      //完整版输出
    // .pipe(rename({ suffix: '.min' }))   //重命名
    .pipe(minifycss()) //CSS压缩
    .pipe(gulp.dest('dist/css')) //压缩版输出
    .pipe(notify({
      message: '样式文件处理完成'
    }));
});

// 如果需要通过scss文件编译css，就使用这段代码
// gulp.task('styles', function() {
//   return gulp.src('html/css/main.scss')
//     .pipe(sass({ style: 'expanded', }))
//     .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
//     .pipe(gulp.dest('dist/styles'))
//     .pipe(rename({ suffix: '.min' }))
//     .pipe(minifycss())
//     .pipe(gulp.dest('dist/styles'))
//     .pipe(notify({ message: 'Styles task complete' }));
// });
// JS处理任务
gulp.task('scripts', function() {
  return gulp.src(['html/js/*.js']) //引入所有需处理的JS
    .pipe(jshint.reporter('default')) //S代码检查
    //.pipe(concat('main.js'))                  //合并JS文件
    // .pipe(gulp.dest('dist/js'))        //完整版输出
    // .pipe(rename({ suffix: '.min' }))         //重命名
    .pipe(uglify()) //压缩JS
    .pipe(gulp.dest('dist/js')) //压缩版输出
    .pipe(notify({
      message: 'JS文件处理完成'
    }));
});

// 图片处理任务
gulp.task('images', function() {
  return gulp.src('html/img/*') //引入所有需处理的JS
    //.pipe(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true }))      //压缩图片
    // 如果想对变动过的文件进行压缩，则使用下面一句代码
    .pipe(cache(imagemin({
      optimizationLevel: 3,
      progressive: true,
      interlaced: true
    })))
    .pipe(gulp.dest('dist/img'))
    .pipe(notify({
      message: '图片处理完成'
    }));
});

// 目标目录清理
gulp.task('clean', function() {
  return gulp.src(['dist/*.html', 'dist/css', 'dist/js'], {
    read: false
  })
    .pipe(clean());
});

gulp.task('extend', function() {
  gulp.src('html/*/*.html')
    .pipe(extender({
      annotations: false,
      verbose: false
    })) // default options
    .pipe(gulp.dest('dist/'))
    .pipe(notify({
      message: 'HTML模板处理完成'
    }));
});

// 预设任务，执行清理后，
// gulp.task('default', ['clean'], function() {
//     gulp.start('styles', 'scripts', 'images','extend');
// });
// 预设任务，执行清理后，
gulp.task('default', function() {
  gulp.start('extend');
});
// 文档临听
gulp.task('watch', function() {
  //gulp.watch('html/*/*.html', ['extend']);
  // gulp.watch('html/js/*.js',['scripts']);
  // gulp.watch('html/css/*.css',['styles']);


  gulp.watch('dev/js/*.js', function(e) {
    var path = e.path;
    var name = path.substr(path.lastIndexOf("/") + 1, path.length);
    gulp.src(path)
      .pipe(jshint.reporter('default')) //JS代码检查
      //.pipe(uglify())
      .pipe(gulp.dest('dist/js')) //压缩版输出
      .pipe(notify({
        message: name + '  JS文件处理完成'
      }));
  });
  gulp.watch('dev/html/*/*.html', function(e) {
    var path = e.path.split("/");
    var name = path[path.length - 1];
    var folder = path[path.length - 2];
    gulp.src(e.path)
      .pipe(extender({
        annotations: false,
        verbose: false
      })) // default options
      .pipe(gulp.dest('dist/' + folder))
      .pipe(notify({
        message: name + '  HTML模板处理完成'
      }));
  });
  gulp.watch('dev/css/*.css', function(e) {
    var path = e.path.replace("/Users/daiwenjun/git/try-frontend-admin/", "");
    gulp.src(path) //引入所有CSS
      .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
      .pipe(minifycss()) //CSS压缩
      .pipe(gulp.dest('dist/css')) //压缩版输出
      .pipe(notify({
        message: path + '   样式文件处理完成'
      }));
  });
  //  // 监听所有.scss文档
  //   gulp.watch('src/styles/**/*.scss', ['styles']);


  // // 创建实时调整服务器 -- 在项目中未使用注释掉
  // var server = livereload();
  // // 监听 dist/ 目录下所有文档，有更新时强制浏览器刷新（需要浏览器插件配合或按前文介绍在页面增加JS监听代码）
  // gulp.watch(['dist/**']).on('change', function(file) {
  //   server.changed(file.path);
  // });

});
